package br.ita.doacoes.domain.voluntarios;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.OneToMany;
import javax.persistence.CascadeType;

import org.hibernate.annotations.AccessType;

import br.ita.doacoes.domain.cadastrodoacoes.Pessoa;
import br.ita.doacoes.domain.campanha.CampVol;

/**
 * @since 14/11/2007
 * @author Marcela
 * Classe que representa a tabela voluntario
 * 
 */
@Entity
@AccessType("field")
public class Voluntario  implements Serializable {
	
	@Id
	@Column(name = "id_voluntario", nullable=false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id_voluntario;
	
	private boolean formal;

	@OneToOne 
	@JoinColumn(name = "id_pessoa", referencedColumnName="id_pessoa",  nullable = false)
	private Pessoa pessoa;

	@ManyToOne
	@JoinColumn(name="id_disponibilidade", referencedColumnName="id_disponibilidade")
	private Disponibilidade disponibilidade;

	@ManyToMany
	private Collection<Habilidade> habilidades;
	
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "voluntario")
	private Collection<CampVol> campvol;
	
	public Integer getId_voluntario() {
		return id_voluntario;
	}

	public Collection<CampVol> getCampvol() {
		return campvol;
	}

	public void setCampvol(Collection<CampVol> campvol) {
		this.campvol = campvol;
	}

	public void setId_voluntario(Integer id_voluntario) {
		this.id_voluntario = id_voluntario;
	}

	public boolean isFormal() {
		return formal;
	}

	public void setFormal(boolean formal) {
		this.formal = formal;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
	
	public Collection<Habilidade> getHabilidades() {
		return habilidades;
	}

	public void setHabilidades(Collection<Habilidade> habilidades) {
		this.habilidades = habilidades;
	}

	
	public Disponibilidade getDisponibilidade() {
		return disponibilidade;
	}

	public void setDisponibilidade(Disponibilidade disponibilidade) {
		this.disponibilidade = disponibilidade;
	}
	
    public Object[] getHabilidadesArray(){
    	return getHabilidades().toArray();
    }
    
    public void setHabilidadesArray(Object[] habilidadesArray){
    	if (habilidades == null)
    		habilidades = new HashSet<Habilidade>();
    	habilidades.clear();
    	for(Object o: habilidadesArray)
    		habilidades.add((Habilidade)o);
    }

}